home *** CD-ROM | disk | FTP | other *** search
Wrap
package sun.tools.javadoc; import java.io.File; import java.io.PrintStream; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; import sun.tools.java.ClassDeclaration; import sun.tools.java.ClassDefinition; import sun.tools.java.ClassNotFound; import sun.tools.java.Constants; import sun.tools.java.FieldDefinition; import sun.tools.java.Identifier; import sun.tools.java.Type; import sun.tools.tree.LocalField; class MIFDocumentationGenerator extends DocumentationGenerator implements Constants { static final int RECTID = 17; ClassDeclaration currentClass; Vector allFields = new Vector(); static final int C_VARIABLE = 0; static final int C_CONSTRUCTOR = 1; static final int C_METHOD = 2; static final int MARKER_package = 18; static final int MARKER_classType = 19; static final int MARKER_class = 20; static final int MARKER_methodName = 22; static final char hardSpaceChar = '\u0011'; private static final double firstMargin = (double)0.5F; private static final double tabIncrement = (double)0.25F; static String[] DocumentationStrings = new String[]{"Variables", "Constructors", "Methods"}; void genPackagesDocumentation(String[] var1, String[] var2) { } void genPackageDocumentation(Identifier var1, ClassDeclaration[] var2, ClassDeclaration[] var3, ClassDeclaration[] var4, ClassDeclaration[] var5) { PrintStream var6 = DocumentationGenerator.openFile(var1 + ".mif"); MIFPrintStream var7 = new MIFPrintStream(var6, "AW.mif", 17); var7.newParagraph("Chapter Number").markReference("Package " + var1).mark(18, var1.toString()).charTag("Chapter Word", "chapter"); var7.newParagraph("Chapter Title").literal("Package " + var1); File var8 = new File("capsule", var1 + ".fm"); if (var8.exists()) { var7.importText("<c\\>capsule<c\\>" + var1 + ".fm"); } else { System.out.println("Can't find capsule " + var8); var7.newParagraph("First").charTag("OI-Opening Initial", "S").literal("ome stuff that Lisa or someone else has written about ").literal("the package " + var1); } this.genPackageDocumentationType(var7, var3, "Classes"); this.genPackageDocumentationType(var7, var4, "Exceptions"); this.genPackageDocumentationType(var7, var5, "Errors"); this.genPackageDocumentationType(var7, var2, "Interfaces"); var7.close(); } private void genPackageDocumentationType(MIFPrintStream var1, ClassDeclaration[] var2, String var3) { if (var2.length != 0) { DocumentationGenerator.sort(var2); var1.newParagraph("ClassType").mark(19, var3).literal(var3); for(int var4 = 0; var4 < var2.length; ++var4) { try { ClassDefinition var5 = var2[var4].getClassDefinition(super.env); this.genClassDocumentation(var1, var5); } catch (ClassNotFound var6) { System.err.println("Warning: Couldn't find class info for " + var2[var4].getName()); } } } } public void genClassDocumentation(ClassDefinition var1, ClassDeclaration var2, ClassDeclaration var3) { PrintStream var4 = DocumentationGenerator.openFile(var1.getName() + ".mif"); MIFPrintStream var5 = new MIFPrintStream(var4, "AW.mif", 17); this.genClassDocumentation(var5, var1); var5.close(); } private void genClassDocumentation(MIFPrintStream var1, ClassDefinition var2) { System.out.println("generating documentation for " + var2); this.currentClass = var2.getClassDeclaration(); Identifier var3 = var2.getName(); Identifier var4 = var2.getName().getName(); Identifier var5 = var2.getName().getQualifier(); String var6 = var2.isInterface() ? "Interface" : "Class"; String var7 = var6 + " " + var4; var1.newParagraph("Class Header").emitPendingMarks().markReference(this.classTag(this.currentClass)).mark(20, var7).mark(0, var5).mark(1, var7).index((var2.isInterface() ? "Interfaces" : "Classes") + ":" + "<ClassName>" + var3 + "<Default Para Font>").index(var4 + ":" + var6 + " in package " + var5).literal(var7).topLevel(); if (!var2.isPublic() && !Constants.idNull.equals(var2.getName().getQualifier())) { var1.newParagraph("body"); var1.literal("This class is not public and can therefore ").literal("cannot be used outside this package."); } else { Vector var8 = DocumentationGenerator.allVariables(var2); Vector var9 = DocumentationGenerator.allConstructors(var2); Vector var10 = DocumentationGenerator.allMethods(var2); var8 = DocumentationGenerator.localFieldsOf(var2, var8); var10 = DocumentationGenerator.localFieldsOf(var2, var10); var9 = DocumentationGenerator.localFieldsOf(var2, var9); var1.html("ClassComment", ((DocumentationGenerator)this).firstSentence(var2)); FieldDefinition[] var11 = new FieldDefinition[var8.size()]; FieldDefinition[] var12 = new FieldDefinition[var10.size()]; FieldDefinition[] var13 = new FieldDefinition[var9.size()]; var8.copyInto(var11); var10.copyInto(var12); var9.copyInto(var13); DocumentationGenerator.xsort(var11); DocumentationGenerator.xsort(var12); DocumentationGenerator.xsort(var13); this.genClassIndex(var2, var1, var11, var13, var12); String var14 = var2.getDocumentation(); if (var14 != null) { Vector var15 = DocumentationGenerator.mergeDoc(var14); String var16 = ((DocumentationGenerator)this).getComment(var15); String var17 = ((DocumentationGenerator)this).getAuthors(var15); String var18 = ((DocumentationGenerator)this).getVersion(var15); Vector var19 = ((DocumentationGenerator)this).getSees(var15, this.currentClass); if (var16 != null) { var1.html("ClassComment", var16); } if (var18 != null) { var1.newParagraph("ClassInfo").literal("Version:"); var1.newParagraph("ClassInfoData").literal(var18); } if (var17 != null) { var1.newParagraph("ClassInfo").literal("Author:"); var1.newParagraph("ClassInfoData").literal(var17); } if (var19 != null) { var1.newParagraph("ClassInfo").literal("See Also:"); var1.newParagraph("ClassInfoData"); this.handleSeeStrings(var1, var19); } } this.genDocumentation(var1, var11, 0); this.genDocumentation(var1, var13, 1); this.genDocumentation(var1, var12, 2); } } private void genSuperClasses(MIFPrintStream var1, ClassDefinition var2) { ClassDeclaration var3 = var2.getClassDeclaration(); Vector var4 = ((DocumentationGenerator)this).superclassesOf(var3); int var5 = var4.size(); ClassDeclaration[] var6 = var2.getInterfaces(); if (var5 != 1) { var1.newParagraph("Parents").indent((double)0.5F, (double)0.5F, (double)0.0F).println(" <PgfSpAfter 12pt>").println(" <PgfNumTabs " + (var5 - 1) + ">"); for(int var7 = 0; var7 < var5 - 1; ++var7) { double var8 = (double)0.5F + (double)0.25F * (double)(var7 + 1); var1.println(" <TabStop <TSX " + var8 + "in> " + "<TSType Left> <TSLeaderStr ` ' > >"); } if (var2.isPublic()) { var1.literal("public "); } if (var2.isFinal()) { var1.literal("final "); } var1.literal(var2.isInterface() ? "interface " : "class "); Identifier var14 = var2.getName().getQualifier(); Identifier var9 = var2.getName().getName(); if (var14 != null) { var1.literal(var14).literal('.'); } var1.bold(var9); if (!var2.isInterface()) { int var10 = var5 - 1; int var11 = 1; while(true) { --var10; if (var10 < 0) { break; } ClassDeclaration var12 = (ClassDeclaration)var4.elementAt(var10); var1.literal('\n'); for(int var13 = 0; var13 < var11; ++var13) { var1.literal('\t'); } var1.literal("extends").literal('\u0011'); var14 = var12.getName().getQualifier(); var9 = var12.getName().getName(); if (var14 != null) { var1.literal(var14).literal('.'); } var1.bold(var9); this.XRef(var1, var12); ++var11; } } if (var6.length > 0) { var1.literal(var2.isInterface() ? "\n\textends " : "\n\timplements "); for(int var19 = 0; var19 < var6.length; ++var19) { if (var19 > 0) { var1.literal(", "); } var14 = var6[var19].getName().getQualifier(); var9 = var6[var19].getName().getName(); if (var14 != null) { var1.literal(var14).literal('.'); } var1.bold(var9); this.XRef(var1, var6[var19]); } } } } private void genClassIndex(ClassDefinition var1, MIFPrintStream var2, FieldDefinition[] var3, FieldDefinition[] var4, FieldDefinition[] var5) { var1.getClassDeclaration(); ClassDeclaration var6 = var1.getSuperClass(); ClassDeclaration[] var7 = var1.getInterfaces(); var2.newParagraph("SummaryTtyFirst"); if (var1.isPublic()) { var2.literal("public").literal('\u0011'); } if (var1.isFinal()) { var2.literal("final").literal('\u0011'); } var2.literal(var1.isInterface() ? "interface" : "class").literal('\u0011'); Identifier var8 = var1.getName().getQualifier(); if (var8 != null && var8 != Constants.idNull) { var2.literal(var8).literal('.'); } var2.bold(var1.getName().getName()); if (!var1.isInterface() && var6 != null) { var8 = var6.getName().getQualifier(); var2.newParagraph("SummaryTty").println(" <PgfWithPrev Yes>").literal(" extends").literal('\u0011'); if (var8 != null && var8 != Constants.idNull) { var2.literal(var8).literal('.'); } var2.bold(var6.getName().getName()).literal('\u0011'); this.XRef(var2, var6, (Object)null, "(Section)"); } if (var7.length > 0) { for(int var9 = 0; var9 < var7.length; ++var9) { if (var9 > 0) { var2.literal(","); } var2.newParagraph("SummaryTty").println(" <PgfWithPrev Yes>").literal(" "); if (var9 == 0) { var2.literal(var1.isInterface() ? "extends " : "implements "); } else { var2.literal(var1.isInterface() ? " " : " "); } var8 = var7[var9].getName().getQualifier(); if (var8 != null && var8 != Constants.idNull) { var2.literal(var8).literal('.'); } var2.bold(var7[var9].getName().getName()).literal('\u0011'); this.XRef(var2, var7[var9], (Object)null, "(Section)"); } } var2.newParagraph("SummaryTty").literal("{"); for(int var14 = 0; var14 < var3.length; ++var14) { var2.newParagraph("SummaryTty"); this.doVariableTTY(var3[var14], var2, 45, " ", " ", ";", true, true); } for(int var10 = 0; var10 < var4.length; ++var10) { var2.newParagraph("SummaryTty"); this.doMethodTTY(var4[var10], var2, 45, " ", " ", ";", true, true); } for(int var11 = 0; var11 < var5.length; ++var11) { var2.newParagraph("SummaryTty"); this.doMethodTTY(var5[var11], var2, 45, " ", " ", ";", true, true); } var2.newParagraph("SummaryTty").println(" <PgfWithPrev Yes>").println(" <PgfSpAfter 6.0 pt>").literal('}'); } private void genDocumentation(MIFPrintStream var1, FieldDefinition[] var2, int var3) { Hashtable var4 = null; if (var2.length > 0) { var1.newParagraph("Heading1"); if (var3 == 1) { var1.markReference(this.classTag(this.currentClass, this.currentClass.getName().getName())); } var1.literal(DocumentationStrings[var3]); for(int var5 = 0; var5 < var2.length; ++var5) { FieldDefinition var6 = var2[var5]; if (var3 == 0) { this.genVariableDocumentation(var1, var6); } else if (var3 == 1) { this.genMethodDocumentation(var1, var6, false); } else { Identifier var7 = var6.getName(); if (var4 == null) { var4 = new Hashtable(); } this.genMethodDocumentation(var1, var6, var4.get(var7) == null); var4.put(var7, var7); } if (Main.showIndex) { this.allFields.addElement(var6); } } } } void genVariableDocumentation(MIFPrintStream var1, FieldDefinition var2) { ClassDefinition var3 = var2.getClassDefinition(); String var4 = var2.getName().toString(); var1.newParagraph("FieldTtyHead").literal(var4).markReference(this.classTag(this.currentClass, var4)).mark(22, var4).index(var4 + ":" + "<Code in index>" + (var2.isStatic() ? "static " : "") + var2.getType().typeString(var4.toString(), true, false) + "<Default Para Font> in " + (var3.isInterface() ? "interface " : "class ") + var2.getClassDeclaration().getName().getName()); var1.newParagraph("FieldTty"); this.doVariableTTY(var2, var1, 52, "", "", "", false, false); String var5 = var2.getDocumentation(); if (var5 != null) { Vector var6 = DocumentationGenerator.mergeDoc(var5); String var7 = ((DocumentationGenerator)this).getComment(var6); Vector var8 = ((DocumentationGenerator)this).getSees(var6, this.currentClass); if (var7 != null) { var1.html("FieldComment", var7); } if (var8 != null) { var1.newParagraph("FieldInfo").literal("See Also:"); var1.newParagraph("FieldInfoData"); this.handleSeeStrings(var1, var8); } } } void genMethodDocumentation(MIFPrintStream var1, FieldDefinition var2, boolean var3) { ClassDefinition var4 = var2.getClassDefinition(); var2.getType(); boolean var5 = var2.isConstructor(); Identifier var6 = var5 ? var4.getName().getName() : var2.getName(); var1.newParagraph("FieldTtyHead").literal(var6).mark(22, this.methodFullName(var2)).markReference(this.classTag(this.currentClass, this.methodFullName(var2))).index(var6 + ":" + "<Code in index>" + (var2.isStatic() ? "static " : "") + var2.getType().typeString(var6.toString(), true, !var5) + "<Default Para Font> in " + (var4.isInterface() ? "interface " : "class ") + var2.getClassDeclaration().getName().getName()); if (var3) { var1.markReference(this.classTag(this.currentClass, var2.getName())); } var1.newParagraph("FieldTty"); this.doMethodTTY(var2, var1, 52, "", "", "", false, false); ClassDeclaration[] var7 = var2.getExceptions(super.env); if (var7.length > 0) { var1.newParagraph("FieldTty").indent((double)0.25F, (double)0.5F, (double)0.25F).literal("throws"); for(int var8 = 0; var8 < var7.length; ++var8) { var1.literal(var8 > 0 ? ", " : " ").literal(var7[var8].getName().getName()); } } var1.topLevel(); String var19 = ((DocumentationGenerator)this).getDocumentation(var2); FieldDefinition var9 = ((DocumentationGenerator)this).getOverride(var2); if (var9 != null && var19 == null) { var19 = ""; } if (var19 != null) { Vector var10 = DocumentationGenerator.mergeDoc(var19); String var11 = ((DocumentationGenerator)this).getComment(var10); String var12 = ((DocumentationGenerator)this).getReturn(var10); Vector var13 = ((DocumentationGenerator)this).getSees(var10, this.currentClass); Vector var14 = DocumentationGenerator.getParameters(var10); Vector var15 = ((DocumentationGenerator)this).getThrows(var10, var2); if (var11 != null) { var1.html("FieldComment", var11); } if (var14 != null) { var1.newParagraph("FieldInfo").literal("Parameters:"); for(int var16 = 0; var16 < var14.size(); var16 += 2) { String var17 = (String)var14.elementAt(var16); String var18 = (String)var14.elementAt(var16 + 1); var1.newParagraph("ParameterName").literal(var17); var1.html("ParameterData", var18); } } if (var12 != null) { var1.newParagraph("FieldInfo").literal("Returns:"); var1.html("FieldInfoData", var12); } if (var15 != null) { for(int var21 = 0; var21 < var15.size(); var21 += 2) { ClassDeclaration var23 = (ClassDeclaration)var15.elementAt(var21); String var24 = (String)var15.elementAt(var21 + 1); var1.newParagraph("FieldInfo").println(" <PgfPlacementStyle RunIn>").println(" <PgfRunInDefaultPunct `: '>").literal("Throws").newParagraph("FieldInfoData").charTag("ClassName", var23.getName().getName()); this.XRef(var1, var23); var1.html("FieldInfoData", var24); } } if (var9 != null) { ClassDeclaration var22 = var9.getClassDeclaration(); var1.newParagraph("FieldInfo").literal("Overrides:"); var1.newParagraph("FieldInfoData").charTag("MethodName", var9.getName() + "()").literal(" in class ").charTag("ClassName", var22.getName().getName()); this.XRef(var1, var22, this.methodFullName(var2)); var1.literal('.'); Object var20 = null; } if (var13 != null) { var1.newParagraph("FieldInfo").literal("See Also:"); var1.newParagraph("FieldInfoData"); this.handleSeeStrings(var1, var13); } } } private void doMethodTTY(FieldDefinition var1, MIFPrintStream var2, int var3, String var4, String var5, String var6, boolean var7, boolean var8) { Type[] var9 = var1.getType().getArgumentTypes(); Identifier var10 = var1.isConstructor() ? var1.getClassDeclaration().getName().getName() : var1.getName(); int var11 = var10.toString().length(); ClassDeclaration var12 = var1.getClassDeclaration(); if (var1.getArguments() == null) { throw new RuntimeException("getArguments returns null for " + var1); } else { Enumeration var13 = var1.getArguments().elements(); if (!var1.isStatic()) { var13.nextElement(); } StringBuffer var14 = new StringBuffer(); StringBuffer var15 = new StringBuffer(); var14.append(DocumentationGenerator.modString(var1).trim()); if (!var1.isConstructor()) { var14.append(" ").append(((DocumentationGenerator)this).typeString(var1.getType().getReturnType())).append(((DocumentationGenerator)this).typeArrayString(var1.getType().getReturnType())); } var15.append('('); for(int var16 = 0; var16 < var9.length; ++var16) { LocalField var17 = (LocalField)var13.nextElement(); if (var16 > 0) { var15.append(", "); } var15.append(((DocumentationGenerator)this).typeString(var9[var16])).append('\u0011').append(((FieldDefinition)var17).getName()).append(((DocumentationGenerator)this).typeArrayString(var9[var16])); } var15.append(")").append(var6); Vector var24 = new Vector(); int var18 = var4.length() + var14.length() + 1 + var11; boolean var19 = this.trySplit(var15, var24, var3 - var18, var7 ? 1 : -1); Vector var20 = new Vector(); this.trySplit(var15, var20, var3 - var5.length() - var11, var7 ? 1 : -1); if (!var19 && var24.size() <= var20.size()) { var13 = var24.elements(); var2.literal(var4).literal(var14).literal(' '); if (var8) { var2.bold(var10); } else { var2.literal(var10); } var2.literal(var13.nextElement()); if (var7) { var2.literal('\t'); this.XRef(var2, var12, this.methodFullName(var1), "Section & Page"); } for(; var13.hasMoreElements(); var2.literal(var13.nextElement())) { var2.literal('\n').literal(var4); int var25 = var14.length() + 1 + var11 + 1; while(true) { --var25; if (var25 < 0) { break; } var2.literal('\u0011'); } } } else { var13 = var20.elements(); var2.literal(var4).literal(var14); if (var7) { var2.literal('\t'); this.XRef(var2, var12, this.methodFullName(var1), "Section & Page"); } var2.literal('\n').literal(var5); if (var8) { var2.bold(var10); } else { var2.literal(var10); } var2.literal(var13.nextElement()); for(; var13.hasMoreElements(); var2.literal(var13.nextElement())) { var2.literal('\n').literal(var5); int var21 = var11 + 1; while(true) { --var21; if (var21 < 0) { break; } var2.literal('\u0011'); } } } } } boolean trySplit(StringBuffer var1, Vector var2, int var3, int var4) { boolean var5 = false; String var6 = var1.toString(); for(int var7 = 0; var6.length() > 0; ++var7) { int var8 = var3 + (var7 == 0 ? 0 : var4); String var9; if (var6.length() <= var8) { var9 = var6; var6 = ""; } else { int var10 = var6.lastIndexOf(32, var8); if (var10 == -1) { var10 = var6.indexOf(32); } if (var10 == -1) { var9 = var6; var6 = ""; } else { var9 = var6.substring(0, var10); var6 = var6.substring(var10 + 1); } } if (var9.length() > var8) { var5 = true; } var2.addElement(var9); } return var5; } private void doVariableTTY(FieldDefinition var1, MIFPrintStream var2, int var3, String var4, String var5, String var6, boolean var7, boolean var8) { Identifier var9 = var1.getName(); int var10 = var9.toString().length(); StringBuffer var11 = new StringBuffer(); StringBuffer var12 = new StringBuffer(); var11.append(DocumentationGenerator.modString(var1).trim()).append(' ').append(((DocumentationGenerator)this).typeString(var1.getType())); var12.append(((DocumentationGenerator)this).typeArrayString(var1.getType())).append(var6); var2.literal(var4).literal(var11); if (var4.length() + var11.length() + 1 + var10 + var12.length() <= var3) { var2.literal(' '); if (var8) { var2.bold(var9).literal(var12); } else { var2.literal(var9).literal(var12); } if (var7) { var2.literal('\t'); this.XRef(var2, var1.getClassDeclaration(), var9, "Section & Page"); return; } } else { if (var7) { var2.literal('\t'); this.XRef(var2, var1.getClassDeclaration(), var9, "Section & Page"); } var2.literal('\n').literal(var5); if (var8) { var2.bold(var9).literal(var12); return; } var2.literal(var9).literal(var12); } } void genFieldIndex() { System.out.println("No need for index for MIF"); } void genClassTree(Hashtable var1, ClassDeclaration var2) { this.currentClass = null; PrintStream var3 = DocumentationGenerator.openFile("tree.mif"); MIFPrintStream var4 = new MIFPrintStream(var3, "AW.mif", 17); var4.newParagraph("Chapter Number").println(" <PgfNumFormat `C:\\x12 <A=1\\>< =0\\>< =0\\>< =0\\>< =0\\>'>").charTag("Chapter Word", "appendix"); var4.newParagraph("Chapter Title").literal("Class Hierarchy"); this.genClassTree(var4, var1, var2, 0); var4.close(); } private void genClassTree(MIFPrintStream var1, Hashtable var2, ClassDeclaration var3, int var4) { Identifier var5 = var3.getName().getQualifier(); Identifier var6 = var3.getName().getName(); var1.newParagraph("Body").skip(0).indent((double)0.25F * (double)var4, (double)0.25F * (double)(var4 + 2), (double)0.0F); try { ClassDefinition var7 = var3.getClassDefinition(super.env); ClassDeclaration[] var8 = var7.getInterfaces(); var1.literal(var7.isClass() ? "class " : "interface ").literal(var5).literal('.').bold(var6); this.XRef(var1, var3); if (var8.length > 0) { var1.literal(var7.isInterface() ? " extends" : " implements").literal('\u0011'); for(int var9 = 0; var9 < var8.length; ++var9) { ClassDeclaration var10 = var8[var9]; if (var9 > 0) { var1.literal(", "); } var1.literal(var10.getName().getName()); this.XRef(var1, var10); } } } catch (ClassNotFound var11) { } ClassDeclaration[] var13 = (ClassDeclaration[])var2.get(var3); if (var13 != null && var13.length > 0) { ++var4; for(int var14 = 0; var14 < var13.length; ++var14) { this.genClassTree(var1, var2, var13[var14], var4); } } } String authorString(String var1) { return var1; } String commentString(String var1) { return var1; } String versionString(String var1) { return var1; } String returnString(String var1) { return var1; } String classString(ClassDeclaration var1) { return var1.getName().getName().toString(); } private void handleSeeStrings(MIFPrintStream var1, Vector var2) { boolean var3 = true; for(Enumeration var4 = var2.elements(); var4.hasMoreElements(); var3 = false) { ClassDeclaration var5 = (ClassDeclaration)var4.nextElement(); String var6 = (String)var4.nextElement(); String var7 = (String)var4.nextElement(); if (!var3) { var1.literal(", "); } if (var6 == null) { var1.charTag("ClassName", var5.getName().getName()); this.XRef(var1, var5); } else { Identifier var8 = Identifier.lookup(var6); try { FieldDefinition var9 = var5.getClassDefinition(super.env).findAnyMethod(super.env, var8); if (var9 != null && var9.isMethod()) { var6 = var6 + "()"; } } catch (ClassNotFound var10) { } var1.charTag("MethodName", var6); if (var5 != this.currentClass) { var1.literal(" in class").literal('\u0011').charTag("ClassName", var5.getName().getName()); } this.XRef(var1, var5, var7); } } var1.literal('.'); } String methodFullName(FieldDefinition var1) { Identifier var2 = var1.isConstructor() ? var1.getClassDeclaration().getName().getName() : var1.getName(); return var1.getType().typeString(var2.toString(), false, false); } String classTag(ClassDeclaration var1) { return "class " + var1.getName(); } String classTag(ClassDeclaration var1, Object var2) { return "class " + var1.getName() + "." + var2; } String sourceFile(ClassDeclaration var1) { Identifier var2 = var1.getName().getQualifier(); return var2 + ".fm"; } void XRef(MIFPrintStream var1, ClassDeclaration var2) { this.XRef(var1, var2, (Object)null); } void XRef(MIFPrintStream var1, ClassDeclaration var2, Object var3) { var1.literal('\u0011'); this.XRef(var1, var2, var3, "(Section)"); } void XRef(MIFPrintStream var1, ClassDeclaration var2, Object var3, String var4) { String var5 = this.sourceFile(var2); if (this.currentClass != null && this.sourceFile(this.currentClass).equals(var5)) { var5 = null; } String var6 = var3 == null ? this.classTag(var2) : this.classTag(var2, var3); var1.XRef(var4, var6, var5); } }